<?php
/**
 * bp-clients
 * @package bp-clients
 */

/**
 * Model utilisateur
 */
class Application_Model_Utilisateur extends Application_Model_ModelAbstract
									implements Application_Model_ModelInterface,
									           Zend_Auth_Adapter_Interface
{
	/**
	 * Identifiant
	 * @var int
	 */
    protected $_id;
	
	/**
	 * Nom
	 * @var string
	 */
    protected $_nom;
	
	/**
	 * Prénom
	 * @var string
	 */
    protected $_prenom;
	
	/**
	 * Email
	 * @var string
	 */
    protected $_email;
	
	/**
	 * Code
	 * 
	 * Souvent les initiales, unique dans la db
	 * @var string
	 */
    protected $_code;
	
	/**
	 * Statut d'activité
	 * @var int
	 */
    protected $_actif;
	
    protected $_motDePasse;
    
	/**
	 * Valeur Actif pour le statut d'activité
	 */
    const ENUM_ACTIF_ACTIF = 1;
	/**
	 * Valeur inactif pour le statut d'activité
	 */
    const ENUM_ACTIF_INACTIF = 0;
    
	/**
	 * Constructeur
     * @param Application_Model_MapperAbstract $mapper le mapper de cet objet
	 * @param array $attributs le tableau nom=>valeur d'attributs
	 */
	public function __construct(Application_Model_MapperAbstract $mapper, array $attributs = null)
    {
    	parent::__Construct($mapper,
    	                    array('id',
    							  'nom', 
    							  'prenom', 
    							  'email', 
    							  'code', 
    							  'actif'), 
    						$attributs);
    }
    
	/**
	 * Renvoie le texte representant l'utilisateur
	 * @return string
	 */
    public function texteTitre()
    {
        return join(' - ', array($this->getCode(), $this->nomComplet()));
    }
	
	/**
	 * Renvoie l'identifiant
	 * @return int
	 */    
    public function getId()
    {
        return $this->_id;
    }
	/**
	 * Assigne l'identifiant
	 * @param int $id identifiant
	 * @return Application_Model_Utilisateur cet objet
	 */
    public function setId($id)
    {
        $this->_id = (int)$id;
        return $this;
    }

    /** 
	 * Renvoie le nom
	 * @return string
	 */
    public function getNom()
    {
        return $this->_nom;
    }
	/**
	 * Assigne le nom
	 * @param string $nom
	 * @return Application_Model_Utilisateur cet objet
	 */
    public function setNom($nom)
    {
        $this->_nom = (string)$nom;
        return $this;
    }

    /**
	 * Renvoie le prénom
	 * @return string
	 */
    public function getPrenom()
    {
        return $this->_prenom;
    }
	/**
	 * Assigne le prénom
	 * @param string $prenom
	 * @return Application_Model_Utilisateur cet objet
	 */
    public function setPrenom($prenom)
    {
        $this->_prenom = (string)$prenom;
        return $this;
    }

	/**
	 * Renvoie l'e-mail
	 * @return string
	 */
    public function getEmail()
    {
        return $this->_email;
    }
	/**
	 * Assigne l'e-mail
	 * @param string $email
	 * @return Application_Model_Utilisateur cet objet
	 */
    public function setEmail($email)
    {
        $this->_email = (string)$email;
        return $this;
    }
    
	/**
	 * Renvoie le code
	 * @return string
	 */
    public function getCode()
    {
        return $this->_code;
    }
	/**
	 * Assigne le code
	 * @param string $code
	 * @return Application_Model_Utilisateur cet objet
	 */
    public function setCode($code)
    {
        $this->_code = (string)$code;
        return $this;
    }
    
	/**
	 * Renvoie le statut d'activité
	 * @return int
	 */
    public function getActif()
    {
        return $this->_actif;
    }
	/**
	 * Assigne le statut d'activité
	 * @param int $actif
	 * @return Application_Model_Utilisateur cet objet
	 * @throws Zend_Exception Si la valeur n'est ni actif, ni inactif
	 */
    public function setActif($actif)
    {
        if (!in_array($actif,array(self::ENUM_ACTIF_ACTIF, self::ENUM_ACTIF_INACTIF))){
            throw new Zend_Exception('Statut actif/inactif invalide');
        }
        $this->_actif = $actif;
        return $this;
    }
    
    public function getMotDepasse()
    {
        return $this->_motDePasse;
    }
    public function setMotDePasse($motDePasse)
    {
        $this->_motDePasse = $motDePasse;
        return $this;
    }
    
	/**
	 * Renvoie le nom complet de l'utilisateur
	 * @return string
	 */
    public function nomComplet()
    {
        return join(', ', array(strtoupper($this->getNom()), $this->getPrenom()));
    }

    /**
     * Authentifie l'utilisateur
     */
    public function authenticate(){
        return $this->_mapper->authenticate($this);       
    }
}

